using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroContrato : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
		protected SgiDAOT SgiDAOT = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
				atualizarDdlIdFilial(null, null);
				atualizarDdlIdFormaPgto(null, null);
				atualizarDdlIdCCusto(null, null);
				atualizarDdlIdCClucro(null, null);
				atualizarDdlIdFornecedor(null, null);
				atualizarDdlIdCliente(null, null);
			}

		}

		protected void Page_Unload(object sender, EventArgs e)
		{
			try
			{
				if (this.SgiDAOT != null)
					this.SgiDAOT.closeDAO();
			}
			catch (Exception ex) {}
		}

		protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
		{
			this.grvResultado.PageIndex = e.NewPageIndex;
			btnPesquisa_Click(null, null);
		}
		protected void atualizarDdlIdFilial(object sender, ImageClickEventArgs e)
		{
			List<FilialVO> idFilialCadVOs = new List<FilialVO>();
			idFilialCadVOs.AddRange(this.SgiDAOT.getFilials());
			this.ddlCadIdFilial.DataSource = idFilialCadVOs;
			this.ddlCadIdFilial.DataBind();

			FilialVO idFilialVO = FilialVO.CreateVO();
			idFilialVO.idFilial = -1;
			idFilialVO.filial = "";
			List<FilialVO> idFilialVOs = new List<FilialVO>();
			idFilialVOs.Add(idFilialVO);
			idFilialVOs.AddRange(this.SgiDAOT.getFilials());
			this.ddlIdFilial.DataSource = idFilialVOs;
			this.ddlIdFilial.DataBind();

		}

		protected void atualizarDdlIdFormaPgto(object sender, ImageClickEventArgs e)
		{
			List<FormapgtoVO> idFormaPgtoCadVOs = new List<FormapgtoVO>();
			FormapgtoVO idFormaPgtoCadVO = FormapgtoVO.CreateVO();
			idFormaPgtoCadVO.idFormaPgto = -1;
			idFormaPgtoCadVO.formaPgto = "";
			idFormaPgtoCadVOs.Add(idFormaPgtoCadVO);
			idFormaPgtoCadVOs.AddRange(this.SgiDAOT.getFormapgtos());
			this.ddlCadIdFormaPgto.DataSource = idFormaPgtoCadVOs;
			this.ddlCadIdFormaPgto.DataBind();

		}

		protected void atualizarDdlIdCCusto(object sender, ImageClickEventArgs e)
		{
			List<CcustoVO> idCCustoCadVOs = new List<CcustoVO>();
			CcustoVO idCCustoCadVO = CcustoVO.CreateVO();
			idCCustoCadVO.idCCusto = -1;
			idCCustoCadVO.cCusto = "";
			idCCustoCadVOs.Add(idCCustoCadVO);
			idCCustoCadVOs.AddRange(this.SgiDAOT.getCcustos());
			this.ddlCadIdCCusto.DataSource = idCCustoCadVOs;
			this.ddlCadIdCCusto.DataBind();

		}

		protected void atualizarDdlIdCClucro(object sender, ImageClickEventArgs e)
		{
			List<ClucroVO> idCClucroCadVOs = new List<ClucroVO>();
			ClucroVO idCClucroCadVO = ClucroVO.CreateVO();
			idCClucroCadVO.idCLucro = -1;
			idCClucroCadVO.cLucro = "";
			idCClucroCadVOs.Add(idCClucroCadVO);
			idCClucroCadVOs.AddRange(this.SgiDAOT.getClucros());
			this.ddlCadIdCClucro.DataSource = idCClucroCadVOs;
			this.ddlCadIdCClucro.DataBind();

		}

		protected void atualizarDdlIdFornecedor(object sender, ImageClickEventArgs e)
		{
			List<FornecedorVO> idFornecedorCadVOs = new List<FornecedorVO>();
			FornecedorVO idFornecedorCadVO = FornecedorVO.CreateVO();
			idFornecedorCadVO.idFornecedor = -1;
			idFornecedorCadVOs.Add(idFornecedorCadVO);
			idFornecedorCadVOs.AddRange(this.SgiDAOT.getFornecedors());
			this.ddlCadIdFornecedor.DataSource = idFornecedorCadVOs;
			this.ddlCadIdFornecedor.DataBind();

			FornecedorVO idFornecedorVO = FornecedorVO.CreateVO();
			idFornecedorVO.idFornecedor = -1;
			List<FornecedorVO> idFornecedorVOs = new List<FornecedorVO>();
			idFornecedorVOs.Add(idFornecedorVO);
			idFornecedorVOs.AddRange(this.SgiDAOT.getFornecedors());
			this.ddlIdFornecedor.DataSource = idFornecedorVOs;
			this.ddlIdFornecedor.DataBind();

		}

		protected void atualizarDdlIdCliente(object sender, ImageClickEventArgs e)
		{
			List<ClienteVO> idClienteCadVOs = new List<ClienteVO>();
			ClienteVO idClienteCadVO = ClienteVO.CreateVO();
			idClienteCadVO.idCliente = -1;
			idClienteCadVOs.Add(idClienteCadVO);
			idClienteCadVOs.AddRange(this.SgiDAOT.getClientes());
			this.ddlCadIdCliente.DataSource = idClienteCadVOs;
			this.ddlCadIdCliente.DataBind();

			ClienteVO idClienteVO = ClienteVO.CreateVO();
			idClienteVO.idCliente = -1;
			List<ClienteVO> idClienteVOs = new List<ClienteVO>();
			idClienteVOs.Add(idClienteVO);
			idClienteVOs.AddRange(this.SgiDAOT.getClientes());
			this.ddlIdCliente.DataSource = idClienteVOs;
			this.ddlIdCliente.DataBind();

		}

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			ContratoVO contratoVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdContrato.Text))
				{
					contratoVO = ContratoVO.CreateVO();
					contratoVO.cadastro = DateTime.Now;
					contratoVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					contratoVO = this.SgiDAOT.getContrato(Int32.Parse(this.txtCadIdContrato.Text));
				}

				contratoVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
				contratoVO.desc = this.txtCadDesc.Text;
				contratoVO.vcto = DateTime.Parse(this.txtCadVcto.Text);
				contratoVO.natureza = this.ddlCadNatureza.SelectedValue.Equals("S");
				contratoVO.parcelas = Int32.Parse(this.txtCadParcelas.Text);
				contratoVO.intervalo = Int32.Parse(this.txtCadIntervalo.Text);
				contratoVO.valor = decimal.Parse(this.txtCadValor.Text.Replace(".", ""));
				contratoVO.nrDoc = this.txtCadNrDoc.Text;
				if(string.IsNullOrEmpty(this.txtCadSeparador.Text))
					contratoVO.separador = null;
				else
					contratoVO.separador = this.txtCadSeparador.Text;
				if(string.IsNullOrEmpty(this.txtCadIncremento.Text))
					contratoVO.incremento = null;
				else
					contratoVO.incremento = Int32.Parse(this.txtCadIncremento.Text);
				if(this.ddlCadIdFormaPgto.SelectedValue.Equals("-1"))
					contratoVO.idFormaPgto = null;
				else
					contratoVO.idFormaPgto = Int32.Parse(this.ddlCadIdFormaPgto.SelectedValue);
				if(this.ddlCadIdCCusto.SelectedValue.Equals("-1"))
					contratoVO.idCCusto = null;
				else
					contratoVO.idCCusto = Int32.Parse(this.ddlCadIdCCusto.SelectedValue);
				if(this.ddlCadIdCClucro.SelectedValue.Equals("-1"))
					contratoVO.idCClucro = null;
				else
					contratoVO.idCClucro = Int32.Parse(this.ddlCadIdCClucro.SelectedValue);
				if(this.ddlCadIdFornecedor.SelectedValue.Equals("-1"))
					contratoVO.idFornecedor = null;
				else
					contratoVO.idFornecedor = Int32.Parse(this.ddlCadIdFornecedor.SelectedValue);
				if(this.ddlCadIdCliente.SelectedValue.Equals("-1"))
					contratoVO.idCliente = null;
				else
					contratoVO.idCliente = Int32.Parse(this.ddlCadIdCliente.SelectedValue);
				contratoVO.edicao = DateTime.Now;
				contratoVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					contratoVO.idContrato = (int)this.SgiDAOT.newContrato(contratoVO);
				else
					this.SgiDAOT.setContrato(contratoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdContrato.Text = contratoVO.idContrato.ToString();
				this.ltCadastradoPor.Text = contratoVO.cadastradoPor;
				this.ltEditadoPor.Text = contratoVO.editadoPor;
				this.ltDataCadastro.Text = contratoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = contratoVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idContrato = null;
			int? idFilial = null;
			string desc = null;
			bool? natureza = null;
			string nrDoc = null;
			int? idFornecedor = null;
			int? idCliente = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdContrato.Text))
				{
					idContrato = Int32.Parse(this.txtIdContrato.Text);
				}

				if(!this.ddlIdFilial.SelectedValue.Equals("-1"))
				{
					idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
				}

				if (!string.IsNullOrEmpty(this.txtDesc.Text))
				{
					desc = this.txtDesc.Text;
				}

				if(!this.ddlNatureza.SelectedValue.Equals(" "))
				{
					natureza = this.ddlNatureza.SelectedValue.Equals("S");
				}

				if (!string.IsNullOrEmpty(this.txtNrDoc.Text))
				{
					nrDoc = this.txtNrDoc.Text;
				}

				if(!this.ddlIdFornecedor.SelectedValue.Equals("-1"))
				{
					idFornecedor = Int32.Parse(this.ddlIdFornecedor.SelectedValue);
				}

				if(!this.ddlIdCliente.SelectedValue.Equals("-1"))
				{
					idCliente = Int32.Parse(this.ddlIdCliente.SelectedValue);
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = this.SgiDAOT.getContratos(idContrato, idFilial, null, null, null, idFornecedor, idCliente, desc, natureza, nrDoc);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabContrato.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdContrato.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdContrato.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			ContratoVO contratoVO = null;
			int idContrato = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idContrato = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				contratoVO = this.SgiDAOT.getContrato(idContrato);

				this.txtCadIdContrato.Text = contratoVO.idContrato.ToString();
				this.ddlCadIdFilial.SelectedValue = contratoVO.idFilial.ToString();
				this.txtCadDesc.Text = contratoVO.desc;
				this.txtCadVcto.Text = contratoVO.vcto.ToString("dd/MM/yyyy");
				this.ddlCadNatureza.SelectedValue = (contratoVO.natureza==null?" ":(contratoVO.natureza.Value?"S":"N"));
				this.txtCadParcelas.Text = contratoVO.parcelas.ToString();
				this.txtCadIntervalo.Text = contratoVO.intervalo.ToString();
				this.txtCadValor.Text = String.Format("{0:n2}", contratoVO.valor);
				this.txtCadNrDoc.Text = contratoVO.nrDoc;
				this.txtCadSeparador.Text = contratoVO.separador;
				if(contratoVO.incremento==null)
					this.txtCadIncremento.Text = null;
				else
					this.txtCadIncremento.Text = contratoVO.incremento.Value.ToString();
				if(contratoVO.idFormaPgto==null)
					this.ddlCadIdFormaPgto.SelectedValue = "-1";
				else
					this.ddlCadIdFormaPgto.SelectedValue = contratoVO.idFormaPgto.Value.ToString();
				if(contratoVO.idCCusto==null)
					this.ddlCadIdCCusto.SelectedValue = "-1";
				else
					this.ddlCadIdCCusto.SelectedValue = contratoVO.idCCusto.Value.ToString();
				if(contratoVO.idCClucro==null)
					this.ddlCadIdCClucro.SelectedValue = "-1";
				else
					this.ddlCadIdCClucro.SelectedValue = contratoVO.idCClucro.Value.ToString();
				if(contratoVO.idFornecedor==null)
					this.ddlCadIdFornecedor.SelectedValue = "-1";
				else
					this.ddlCadIdFornecedor.SelectedValue = contratoVO.idFornecedor.Value.ToString();
				if(contratoVO.idCliente==null)
					this.ddlCadIdCliente.SelectedValue = "-1";
				else
					this.ddlCadIdCliente.SelectedValue = contratoVO.idCliente.Value.ToString();
				this.ltCadastradoPor.Text = contratoVO.cadastradoPor;
				this.ltEditadoPor.Text = contratoVO.editadoPor;
				this.ltDataCadastro.Text = contratoVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = contratoVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabContrato.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdContrato.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdContrato.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			ContratoVO contratoVO = null;

			try
			{
				//Cria objeto
				contratoVO = ContratoVO.CreateVO();
				contratoVO.idContrato = Int32.Parse(this.txtCadIdContrato.Text);

				//Chama metodo para excluir registro
				this.SgiDAOT.delContrato(contratoVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}

	}
}
